﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ObjectManager;
using Process;

namespace QuanLyDiem
{
    public partial class frmSinhVien_ThayDoi : Form
    {
        private static frmSinhVien_ThayDoi frm = null;
        private Lop lop = new Lop();
        private BoMon bomon = new BoMon();

        private frmSinhVien_ThayDoi()
        {
            InitializeComponent();
            TimKien(panControl);
            txtMaSV.Enabled = rdMaSV.Checked;
            txtTenSV.Enabled = rdTenSV.Checked;
        }

        private void frmSinhVien_ThayDoi_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (frm != null)
            {
                frm.Dispose();
                frm = null;
            }
        }

        public static frmSinhVien_ThayDoi Create()
        {
            return Create(false);
        }

        public static frmSinhVien_ThayDoi Create(bool child)
        {
            if (frm == null)
            {
                frm = new frmSinhVien_ThayDoi();
            }
            if (child)
            {
                frm.ControlBox = false;
                frm.MinimizeBox = false;
                frm.MaximizeBox = false;
                frm.WindowState = FormWindowState.Maximized;
            }
            frm.RefreshData();
            return frm;
        }

        private void TimKien(Control control)
        {
            if (control.GetType() == typeof(TextBox))
            {
                control.KeyDown += new KeyEventHandler(control_KeyDown);
            }
            if (control.Controls.Count > 0)
            {
                foreach (Control item in control.Controls)
                {
                    TimKien(item);
                }
            }
        }

        private void control_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnTimKien.PerformClick();
            }
        }

        private void cmniXoa_Click(object sender, EventArgs e)
        {
            btnXoa.PerformClick();
        }

        private void cmniChiTiet_Click(object sender, EventArgs e)
        {
            btnSua.PerformClick();
        }

        private void dgvSinhVien_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            btnSua.PerformClick();
        }

        private void cbMa_CheckedChanged(object sender, EventArgs e)
        {
            panNangCao.Enabled = cbNangCao.Checked;
        }

        private void rdTenSV_CheckedChanged(object sender, EventArgs e)
        {
            txtMaSV.Enabled = rdMaSV.Checked;
            txtTenSV.Enabled = rdTenSV.Checked;
            cbNangCao.Enabled = rdTenSV.Checked;
            if (rdTenSV.Checked)
            {
                panNangCao.Enabled = cbNangCao.Checked;
            }
            else
            {
                panNangCao.Enabled = false;
            }
        }

        private void btnDong_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void frmSinhVien_ThayDoi_Load(object sender, EventArgs e)
        {
            RefreshData();
        }

        private void RefreshData()
        {
            List<string> temp = bomon.ListName();
            temp.Insert(0, "Chọn");
            cmbBoMon.DataSource = temp;
            temp = lop.ListName();
            temp.Insert(0, "Chọn");
            cmbLop.DataSource = temp;
            string[] gioitinh = { "Chọn", "Nam", "Nữ" };
            cmbGioiTinh.DataSource = gioitinh;
            SinhVien sinhvien = new SinhVien();
            dgvSinhVien.DataSource = sinhvien.List();
            txtTenSV.Focus();
        }

        private void cmbBoMon_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<string> temp;
            if (cmbBoMon.SelectedIndex == 0)
            {
                temp = lop.ListName();
            }
            else
            {
                temp = lop.ListName(cmbBoMon.Text);
            }
            temp.Insert(0, "Chọn");
            cmbLop.DataSource = temp;
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            if (dgvSinhVien.SelectedRows.Count > 0)
            {
                SinhVien sv = new SinhVien();
                sv.ThongTin.Ma = dgvSinhVien.SelectedRows[0].Cells["cMaSV"].Value.ToString();
                sv.ThongTin.Ten = dgvSinhVien.SelectedRows[0].Cells["cTenSV"].Value.ToString();
                sv.ThongTin.Lop = dgvSinhVien.SelectedRows[0].Cells["cLop"].Value.ToString();
                sv.ThongTin.BoMon = dgvSinhVien.SelectedRows[0].Cells["cBoMon"].Value.ToString();
                string[] temp = dgvSinhVien.SelectedRows[0].Cells["cNgaySinh"].Value.ToString().Split('-', '\\');
                DateTime ngaysinh = new DateTime(int.Parse(temp[2]), int.Parse(temp[1]), int.Parse(temp[0]));
                sv.ThongTin.NgaySinh = ngaysinh;
                sv.ThongTin.GioiTinh = dgvSinhVien.SelectedRows[0].Cells["cGioiTinh"].Value.ToString();
                sv.ThongTin.QueQuan = dgvSinhVien.SelectedRows[0].Cells["cQueQuan"].Value.ToString();

                frmSinhVien_Sua frm = frmSinhVien_Sua.Create(sv);
                frm.Owner = this;
                frm.UpdateSuccess += new QuanLyDiem.UpdateSinhVien(frm_UpdateSuccess);
                frm.ShowDialog();
            }
        }

        private void frm_UpdateSuccess(object sender, InfoUpdateSinhVien e)
        {
            DataTable dt = (DataTable)dgvSinhVien.DataSource;
            DataRow dr = dt.NewRow();
            dr[0] = e.SinhVien.ThongTin.Ma;
            dr[1] = e.SinhVien.ThongTin.Ten;
            dr[2] = e.SinhVien.ThongTin.Lop;
            dr[3] = e.SinhVien.ThongTin.BoMon;
            int ngay = e.SinhVien.ThongTin.NgaySinh.Day;
            int thang = e.SinhVien.ThongTin.NgaySinh.Month;
            string ngaysinh = "";
            if (ngay < 10)
            {
                ngaysinh += "0" + ngay;
            }
            else
            {
                ngaysinh += ngay;
            }
            if (thang < 10)
            {
                ngaysinh += "-0" + thang;
            }
            else
            {
                ngaysinh += thang;
            }
            ngaysinh += "-" + e.SinhVien.ThongTin.NgaySinh.Year;
            dr[4] = ngaysinh;
            dr[5] = e.SinhVien.ThongTin.GioiTinh;
            dr[6] = e.SinhVien.ThongTin.QueQuan;
            dt.Rows.InsertAt(dr, dgvSinhVien.SelectedRows[0].Index + 1);
            dt.Rows.RemoveAt(dgvSinhVien.SelectedRows[0].Index);
        }

        private void btnLamMoi_Click(object sender, EventArgs e)
        {
            RefreshData();
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (dgvSinhVien.SelectedRows.Count > 0)
            {
                DialogResult dalrs = MessageBox.Show("Bạn có chắc chán muốn xóa " + dgvSinhVien.SelectedRows.Count.ToString() + " sinh viên không?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if (dalrs == DialogResult.OK)
                {
                    int count = 0;
                    int length = dgvSinhVien.SelectedRows.Count;
                    foreach (DataGridViewRow item in dgvSinhVien.SelectedRows)
                    {
                        SinhVien sv = new SinhVien();
                        sv.ThongTin.Ma = item.Cells["cMaSV"].Value.ToString();
                        int check = sv.Remove();
                        if (check > 0)
                        {
                            count++;
                            dgvSinhVien.Rows.Remove(item);
                        }
                    }
                    if (count > 0)
                    {
                        MessageBox.Show("Đã xóa thành công " + count.ToString() + " sinh viên", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            else
            {
                MessageBox.Show("Bạn phải chọn các sinh viên muốn xóa", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnTimKien_Click(object sender, EventArgs e)
        {
            if (rdMaSV.Checked)
            {
                SinhVien sv = new SinhVien();
                sv.ThongTin.Ma = txtMaSV.Text;
                dgvSinhVien.DataSource = sv.Search(true);
            }
            else
            {
                if (!cbNangCao.Checked)
                {
                    SinhVien sv = new SinhVien();
                    sv.ThongTin.Ten = txtTenSV.Text;
                    dgvSinhVien.DataSource = sv.Search(false);
                }
                else
                {
                    SinhVien sv = new SinhVien();
                    sv.ThongTin.Ten = txtTenSV.Text;
                    if (cmbBoMon.Text != "Chọn")
                    {
                        sv.ThongTin.BoMon = cmbBoMon.Text;
                    }
                    if (cmbLop.Text != "Chọn")
                    {
                        sv.ThongTin.Lop = cmbLop.Text;
                    }
                    if (cmbGioiTinh.Text != "Chọn")
                    {
                        sv.ThongTin.GioiTinh = cmbGioiTinh.Text;
                    }
                    sv.ThongTin.QueQuan = txtQueQuan.Text;
                    dgvSinhVien.DataSource = sv.Search(false);
                }
            }
        }

        private void txtMaSV_TextChanged(object sender, EventArgs e)
        {
            if (!xString.IsNumber(txtMaSV.Text, StyleNumber.INTEGER))
            {
                txtMaSV.Text = "";
                MessageBox.Show("Bạn chỉ được nhập số", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtMaSV.Focus();
            }
        }
    }
}
